<?php
/**
 * @Author: Ron Chen
 * @Date:   2016-12-05 21:05:00
 * @Last Modified by:   Ron Chen
 * @Last Modified time: 2017-02-26 17:51:16
 */

namespace common\helpers\math;

/**
 * 处理2的幂累加问题
 */
class PowerPlus
{
	const PWOER_VALUE = 2;
	/**
	 * 处理幂值累加的数组
	 * @param $val []  当前累计的出的最后数值
	 * @param $arr []  需要处理的数组 [1=>"上海",2=>"北京",3=>"南京"]
	 */
    public static function ascPowerKeys($val,$arr){
        $start  = 1;
		$end    = max(array_keys($arr));
		$result = [];
		while($start <= $end){
			if ($val&$start){
				if (isset($arr[$start])) {
					$result[$start] = $arr[$start];
				}
			}
			$start++;
		}
		return $result;
    }

    /**
     * 处理数组的累加之后的值
     * @param $arr []  需要处理的数组 [1=>"上海",2=>"北京",3=>"南京"]
     */
    public static function descPowerValue($arr=[]){
    	$int_val = 0;
    	if (count($arr) > 0) {
    		foreach ($arr as $key => $value) {
	    		$int_val += pow(intval($key) , self::PWOER_VALUE);
	    	}
    	}
    	return $int_val;
    }

    /**
     * 处理数组累加的值
     * @param $arr []  需要处理的数组 [0=>2,1=>4,2=>8,3=>6,4=>8]
     */
    public static function descValue($arr=[]){
        if (is_array($arr) && count($arr) > 0) {
            return array_sum($arr);    
        }
        return 0;
    }
}